/**
 * @file EventTypes.hpp
 * @brief 定义系统中使用的所有事件类型
 */

#ifndef EVENTTYPES_HPP
#define EVENTTYPES_HPP


#include <string>

namespace WaveGuard {

    /**
     * @enum EventType
     * @brief 系统中可能发生的事件类型
     */
    enum class EventType {
        UNKNOWN,                // 未知事件

        // 目标检测相关事件
        TARGET_DETECTED,        // 检测到新目标
        TARGET_LOST,            // 丢失目标
        TARGET_IN_RANGE,        // 目标进入射程
        TARGET_OUT_OF_RANGE,    // 目标离开射程

        // 武器控制相关事件
        WEAPON_FIRE_START,      // 开始发射
        WEAPON_FIRE_STOP,       // 停止发射
        
        // 系统状态相关事件
        SYSTEM_ALERT,     // 警戒状态
        SYSTEM_RECON,     // 侦察状态
        SYSTEM_MANUAL,    // 手动控制状态

        // 用户界面相关事件
        UI_BUTTON_CLICKED,      // UI按钮点击
        UI_SLIDER_CHANGED,      // UI滑块变化
        UI_INPUT_SUBMITTED      // UI输入提交
    };

    /**
     * @class Event
     * @brief 所有事件的基类
     */
    class Event {
    public:
        Event(EventType type, const std::string &source = "System")
            : m_type(type), m_source(source) {
        }

        virtual ~Event() = default;

        /**
         * @brief 获取事件类型
         * @return 事件类型
         */
        EventType getType() const { return m_type; }

        /**
         * @brief 获取事件源
         * @return 事件源名称
         */
        std::string getSource() const { return m_source; }

        /**
         * @brief 获取事件的字符串表示
         * @return 事件的字符串表示
         */
        virtual std::string toString() const {
            return "Event(type=" + std::to_string(static_cast<int>(m_type)) +
                ", source=" + m_source + ")";
        }

    protected:
        EventType m_type;       // 事件类型
        std::string m_source;   // 事件源
    };

} // namespace WaveGuard
#endif // !EVENTTYPES_HPP